package br.com.farmabid.cadastro;

import java.util.ResourceBundle;

import javax.inject.Inject;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Result;
import br.com.farmabid.component.StringUteis;
import br.com.farmabid.component.ValidaEmail;
import br.com.farmabid.controller.BasicController;
import br.com.farmabid.controller.HomeController;
import br.com.farmabid.produto.Uf;

@Controller
public class CadastroController extends BasicController {
	@Inject FarmaciaDAO farmaciaDAO;

	@Inject
    public CadastroController(Result result, ResourceBundle bundle) {
		this.result = result;
		this.bundle = bundle;
	}
	
	public CadastroController(){}
	
	@Path(value = "/" + CADASTRO + "/" + GRAVAR)
	@Post
	public void gravar(Farmacia farmacia){
		if(!ValidaEmail.isValid(farmacia.getEmail())){
			mensagemErro("erro.email.invalido");
		}
		if(!StringUteis.isCNPJ(StringUteis.limpaString(farmacia.getCnpj()))){
			farmacia.setCnpj("");
			mensagemErro("erro.cnpj.invalido");
		}
		if(resultPossuiConteudo(ERROR)){
			result.include("farmacia", farmacia);
			redirect(); return;
		}
		if(null != farmacia.getId()){
			//Edição de farmácia.
		} else {
			Farmacia temp = farmaciaDAO.recuperaFarmaciaPorCNPJ(farmacia.getCnpj());
			if(null != temp){
				result.include("farmacia", farmacia);
				mensagemErro("erro.cnpj.cadastrado");
			} else {
				farmaciaDAO.save(farmacia);
				mensagemSucesso("sucesso.pedido.cadastro");
				result.redirectTo(HomeController.class).index();
				return;
			}
		}
		redirect();
	}
	
	@Path(value = "/" + CADASTRO)
	public void cadastro() {
		result.include("listaUfs", farmaciaDAO.recuperaTodos(Uf.class));
		if(!resultPossuiConteudo("farmacia")){
			result.include("farmacia", new Farmacia());
		}
	}

	@Override
	protected void redirect() {
		result.redirectTo(this).cadastro();
	}
	
}